// 网络请求工具
import axios, { type Method } from "axios";
import { getToken } from "./auth";
import { ElMessage } from "element-plus";
import router from "@/router";
// 接口返回的数据类型
interface Data<T> {
    status: number,
    message: string,
    data: T
}
// 创建实例
const request = axios.create({
    baseURL: 'http://127.0.0.1:3001',
    timeout: 5000
})
// 请求拦截器
request.interceptors.request.use((config) => {
    // 获取存储的token,有则加到请求头
    const token = getToken()
    if (token) {
        config.headers.Authorization = token
    }
    return config
}, (e) => {
    return e
})
// 响应拦截器
request.interceptors.response.use((res) => {
    return res.data
}, (err) => {
    // 判断返回的参数是否是401,是的话跳转登录页面
    if (err.response.status === 401) {
        ElMessage({
            message: '用户信息过期,请重新登录',
            type: 'warning'
        })
        router.push({
            path: '/login'
        })
    } else {
        ElMessage({
            message: err.message,
            type: 'error'
        })
    }
    return err
})

// 封装请求方法,只需传递url和请求方法和数据(根据请求方法决定)
const httpReq = <T>(url: string, method: Method = 'GET', data?: object) => {
    return request.request<T, Data<T>>({
        url,
        method,
        [method.toLowerCase() === 'get' ? 'params' : 'data']: data
    })
}
export default httpReq
